]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
dbusServices/screensaver: Split out public ScreenSaver service
authorFlorian Müllner <fmuellner@gnome.org>
Fri, 4 Dec 2020 19:40:13 +0000 (20:40 +0100)
committerMarge Bot <marge-bot@gnome.org>
Mon, 7 Dec 2020 16:24:19 +0000 (16:24 +0000)
Commit 799bbdb50 split out the public Fdo notification service, so
that any app with permission to talk to org.freedesktop.Notifications
will in fact be limited to that service.

To a somewhat lesser extent this applies to the org.gnome.ScreenSaver
service as well, which some applications still use instead of the
Inhibit portal.

https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/3452

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1520>

js/dbusServices/meson.build
js/dbusServices/org.gnome.ScreenSaver.src.gresource.xml [new file with mode: 0644]
js/dbusServices/screensaver/main.js [new file with mode: 0644]
js/dbusServices/screensaver/screenSaverService.js [new file with mode: 0644]
js/ui/shellDBus.js

index 2f047bb52738f94a814357e764e6c5a9a98f0dab..68e8bd12de8252fa41d461b33a40b8defc572970 100644 (file)
@@ -6,6 +6,7 @@ launcherconf.set('libdir', libdir)
 dbus_services = {
   'org.gnome.Shell.Extensions': 'extensions',
   'org.gnome.Shell.Notifications': 'notifications',
+  'org.gnome.ScreenSaver': 'screensaver',
 }
 
 if enable_recorder
diff --git a/js/dbusServices/org.gnome.ScreenSaver.src.gresource.xml b/js/dbusServices/org.gnome.ScreenSaver.src.gresource.xml
new file mode 100644 (file)
index 0000000..834167b
--- /dev/null
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<gresources>
+  <gresource prefix="/org/gnome/ScreenSaver/js">
+    <file>main.js</file>
+    <file>screenSaverService.js</file>
+    <file>dbusService.js</file>
+
+    <file>misc/config.js</file>
+    <file>misc/fileUtils.js</file>
+  </gresource>
+</gresources>
diff --git a/js/dbusServices/screensaver/main.js b/js/dbusServices/screensaver/main.js
new file mode 100644 (file)
index 0000000..2a08d14
--- /dev/null
@@ -0,0 +1,11 @@
+/* exported main */
+
+const { DBusService } = imports.dbusService;
+const { ScreenSaverService } = imports.screenSaverService;
+
+function main() {
+    const service = new DBusService(
+        'org.gnome.ScreenSaver',
+        new ScreenSaverService());
+    service.run();
+}
diff --git a/js/dbusServices/screensaver/screenSaverService.js b/js/dbusServices/screensaver/screenSaverService.js
new file mode 100644 (file)
index 0000000..571e64e
--- /dev/null
@@ -0,0 +1,68 @@
+// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
+/* exported ScreenSaverService */
+
+const { Gio, GLib } = imports.gi;
+
+const { loadInterfaceXML } = imports.misc.fileUtils;
+const { ServiceImplementation } = imports.dbusService;
+
+const ScreenSaverIface = loadInterfaceXML('org.gnome.ScreenSaver');
+const ScreenSaverProxy = Gio.DBusProxy.makeProxyWrapper(ScreenSaverIface);
+
+var ScreenSaverService = class extends ServiceImplementation {
+    constructor() {
+        super(ScreenSaverIface, '/org/gnome/ScreenSaver');
+
+        this._proxy = new ScreenSaverProxy(Gio.DBus.session,
+            'org.gnome.Shell.ScreenShield',
+            '/org/gnome/ScreenSaver',
+            (proxy, error) => {
+                if (error)
+                    log(error.message);
+            });
+
+        this._proxy.connectSignal('ActiveChanged',
+            (proxy, sender, params) => {
+                this._dbusImpl.emit_signal('ActiveChanged',
+                    new GLib.Variant('(b)', params));
+            });
+        this._proxy.connectSignal('WakeUpScreen',
+            () => this._dbusImpl.emit_signal('WakeUpScreen', null));
+    }
+
+    LockAsync(params, invocation) {
+        this._proxy.LockRemote(...params, (res, error) => {
+            if (this._handleError(invocation, error))
+                return;
+
+            invocation.return_value(null);
+        });
+    }
+
+    GetActiveAsync(params, invocation) {
+        this._proxy.GetActiveRemote(...params, (res, error) => {
+            if (this._handleError(invocation, error))
+                return;
+
+            invocation.return_value(new GLib.Variant('(b)', res));
+        });
+    }
+
+    SetActiveAsync(params, invocation) {
+        this._proxy.SetActiveRemote(...params, (res, error) => {
+            if (this._handleError(invocation, error))
+                return;
+
+            invocation.return_value(null);
+        });
+    }
+
+    GetActiveTimeAsync(params, invocation) {
+        this._proxy.GetActiveTimeRemote(...params, (res, error) => {
+            if (this._handleError(invocation, error))
+                return;
+
+            invocation.return_value(new GLib.Variant('(u)', res));
+        });
+    }
+};
index f7b542b2909df6b8fab9e8a5b1af33c2abc73796..181bd1631011aa6606e5c15093b37cd90e4f508e 100644 (file)
@@ -367,7 +367,8 @@ var ScreenSaverDBus = class {
         this._dbusImpl = Gio.DBusExportedObject.wrapJSObject(ScreenSaverIface, this);
         this._dbusImpl.export(Gio.DBus.session, '/org/gnome/ScreenSaver');
 
-        Gio.DBus.session.own_name('org.gnome.ScreenSaver', Gio.BusNameOwnerFlags.REPLACE, null, null);
+        Gio.DBus.session.own_name('org.gnome.Shell.ScreenShield',
+            Gio.BusNameOwnerFlags.NONE, null, null);
     }
 
     LockAsync(parameters, invocation) {